home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 August / August CD.bin / Shareware / Programming / SpriteWorld / Headers / Sprite.h < prev    next >
Encoding:
Text File  |  1994-04-26  |  6.9 KB  |  294 lines  |  [TEXT/KAHL]

  1. ///--------------------------------------------------------------------------------------
  2. //    Sprite.h
  3. //
  4. //    Created:    Tuesday, October 27, 1992 at 10:10:06 PM
  5. //    By:        Tony Myles
  6. //
  7. //    Copyright: © 1991-94 Tony Myles, All rights reserved worldwide
  8. //
  9. //    Description:    constants, structures, and prototypes for sprites
  10. ///--------------------------------------------------------------------------------------
  11.  
  12.  
  13. #ifndef __SPRITE__
  14. #define __SPRITE__
  15.  
  16. #ifndef __SWCOMMON__
  17. #include "SWCommonHeaders.h"
  18. #endif
  19.  
  20. #ifndef __TIMER__
  21. #include <Timer.h>
  22. #endif
  23.  
  24. #ifndef __FRAME__
  25. #include "Frame.h"
  26. #endif
  27.  
  28.  
  29. ///--------------------------------------------------------------------------------------
  30. //    time task data structure
  31. ///--------------------------------------------------------------------------------------
  32.  
  33. typedef struct TimeTaskRec TimeTaskRec;
  34. typedef TimeTaskRec *TimeTaskPtr, **TimeTaskHdl;
  35.  
  36. struct TimeTaskRec
  37. {
  38.     TMTask timeTask;
  39.     Boolean hasTaskFired;
  40. };
  41.  
  42. #ifndef NewTimerProc
  43. #define NewTimerProc(x) (x)
  44. #endif
  45.  
  46.  
  47. ///--------------------------------------------------------------------------------------
  48. //    sprite type definitions
  49. ///--------------------------------------------------------------------------------------
  50.  
  51. typedef struct SpriteRec SpriteRec;
  52. typedef SpriteRec *SpritePtr, **SpriteHdl;
  53.  
  54. #ifdef __cplusplus
  55. extern "C" {
  56. #endif
  57.  
  58. typedef SW_FUNC void (*DrawProcPtr)(
  59.     FramePtr srcFrameP,
  60.     FramePtr dstFrameP,
  61.     Rect *srcRect,
  62.     Rect *dstRect);
  63.  
  64. typedef SW_FUNC void (*FrameProcPtr)(
  65.     SpritePtr srcSpriteP,
  66.     FramePtr curFrameP,
  67.     long *frameIndex);
  68.  
  69. typedef SW_FUNC void (*MoveProcPtr)(
  70.     SpritePtr srcSpriteP,
  71.     Point *spriteLoc);
  72.  
  73. typedef SW_FUNC void (*CollideProcPtr)(
  74.     SpritePtr srcSpriteP,
  75.     SpritePtr dstSpriteP,
  76.     Rect* sectRect);
  77.  
  78. #ifdef __cplusplus
  79. };
  80. #endif
  81.  
  82. ///--------------------------------------------------------------------------------------
  83. //    sprite data structure
  84. ///--------------------------------------------------------------------------------------
  85.  
  86. struct SpriteRec
  87. {
  88.     SpritePtr nextSpriteP;                    // next sprite
  89.     SpritePtr prevSpriteP;                    // previous sprite
  90.     SpritePtr nextActiveSpriteP;
  91.     SpritePtr nextIdleSpriteP;
  92.  
  93.         // drawing fields
  94.     Boolean isVisible;                        // draw the sprite?
  95.     Boolean needsToBeDrawn;                    // sprite has changed, needs to be drawn
  96.     Boolean needsToBeErased;                // sprite needs to be erased onscreen
  97.     char pad1;
  98.     Rect destFrameRect;                        // frame destination rectangle
  99.     Rect oldFrameRect;                        // last frame destination rectangle
  100.     Rect deltaFrameRect;                        // union of the sprite’s lastRect and curRect
  101.     RgnHandle screenMaskRgn;                // mask region for drawing sprite to screen
  102.     DrawProcPtr frameDrawProc;                // callback to draw sprite
  103.  
  104.         // frame fields
  105.     TimeTaskRec frameTimeTask;                // frame advance time task
  106.     FramePtr *frameArray;                    // array of frames
  107.     FramePtr curFrameP;                        // current frame
  108.     long numFrames;                            // number of frames
  109.     long maxFrames;                            // maximum number of frames
  110.     long frameTimeInterval;                    // time interval to advance frame
  111.     long frameAdvance;                        // amount the adjust frame index
  112.     long curFrameIndex;                        // current frame index
  113.     long firstFrameIndex;                    // first frame to advance
  114.     long lastFrameIndex;                        // last frame to advance
  115.     FrameProcPtr frameChangeProc;            // callback to change frames
  116.  
  117.         // movement fields
  118.     TimeTaskRec moveTimeTask;                // movement time task
  119.     long moveTimeInterval;                    // time interval to move sprite
  120.     short horizMoveDelta;                    // horizontal movement delta
  121.     short vertMoveDelta;                        // vertical movement delta
  122.     Rect moveBoundsRect;                        // bounds of the sprite’s movement
  123.     MoveProcPtr spriteMoveProc;            // callback to handle movement
  124.  
  125.         // collision detection fields
  126.     Rect collideRect;                            // collision detection rectangle (not used currently)
  127.     CollideProcPtr spriteCollideProc;    // callback to handle collisions
  128.  
  129.         // miscellaneous
  130.     long userData;                                // reserved for user
  131. };
  132.  
  133.  
  134. ///--------------------------------------------------------------------------------------
  135. //    sprite function prototypes
  136. ///--------------------------------------------------------------------------------------
  137.  
  138. #ifdef __cplusplus
  139. extern "C" {
  140. #endif
  141.  
  142. SW_FUNC OSErr SWCreateSprite(
  143.     SpritePtr* newSpriteP,
  144.     void* spriteStorageP,
  145.     short maxFrames);
  146.  
  147. SW_FUNC OSErr SWCreateSpriteFromCIconResource(
  148.     SpritePtr* newSpriteP,
  149.     void* spriteStorageP,
  150.     short cIconID,
  151.     short maxFrames,
  152.     MaskType maskType);
  153.  
  154. SW_FUNC OSErr SWCreateSpriteFromPictResource(
  155.     SpritePtr* newSpriteP,
  156.     void* spriteStorageP,
  157.     short pictResID,
  158.     short maskResID,
  159.     short maxFrames,
  160.     MaskType maskType);
  161.  
  162. SW_FUNC OSErr SWCloneSprite(
  163.     SpritePtr cloneSpriteP,
  164.     SpritePtr *newSpriteP,
  165.     void* spriteStorageP);
  166.  
  167. SW_FUNC void SWDisposeSprite(
  168.     SpritePtr oldSpriteP);
  169.  
  170. SW_FUNC void SWCloseSprite(
  171.     SpritePtr deadSpriteP);
  172.  
  173. SW_FUNC void SWLockSprite(
  174.     SpritePtr srcSpriteP);
  175.  
  176. SW_FUNC void SWUnlockSprite(
  177.     SpritePtr srcSpriteP);
  178.  
  179. SW_FUNC void SWSetSpriteDrawProc(
  180.     SpritePtr srcSpriteP,
  181.     DrawProcPtr drawProc);
  182.  
  183. SW_FUNC OSErr SWAddFrame(
  184.     SpritePtr srcSpriteP,
  185.     FramePtr newFrameP);
  186.  
  187. SW_FUNC void SWRemoveFrame(
  188.     SpritePtr srcSpriteP,
  189.     FramePtr oldFrameP);
  190.  
  191. SW_FUNC void SWSetCurrentFrame(
  192.     SpritePtr srcSpriteP,
  193.     FramePtr curFrameP);
  194.  
  195. SW_FUNC void SWSetCurrentFrameIndex(
  196.     SpritePtr srcSpriteP,
  197.     short frameIndex);
  198.  
  199. SW_FUNC void SWSetSpriteFrameAdvance(
  200.     SpritePtr srcSpriteP,
  201.     short frameAdvance);
  202.  
  203. SW_FUNC void SWSetSpriteFrameRange(
  204.     SpritePtr srcSpriteP,
  205.     short firstFrameIndex,
  206.     short lastFrameIndex);
  207.  
  208. SW_FUNC void SWSetSpriteFrameTime(
  209.     SpritePtr srcSpriteP,
  210.     long timeInterval);
  211.  
  212. SW_FUNC void SWSetSpriteFrameProc(
  213.     SpritePtr srcSpriteP,
  214.     FrameProcPtr frameProc);
  215.  
  216. SW_FUNC void SWMoveSprite(
  217.     SpritePtr srcSpriteP,
  218.     short horizLoc,
  219.     short vertLoc);
  220.  
  221. SW_FUNC void SWOffsetSprite(
  222.     SpritePtr srcSpriteP,
  223.     short horizDelta,
  224.     short vertDelta);
  225.  
  226. SW_FUNC void SWSetSpriteLocation(
  227.     SpritePtr srcSpriteP,
  228.     short horizLoc,
  229.     short vertLoc);
  230.  
  231. SW_FUNC void SWSetSpriteMoveBounds(
  232.     SpritePtr srcSpriteP,
  233.     Rect* moveBoundsRect);
  234.  
  235. SW_FUNC void SWSetSpriteMoveDelta(
  236.     SpritePtr srcSpriteP,
  237.     short horizDelta,
  238.     short vertDelta);
  239.  
  240. SW_FUNC void SWSetSpriteMoveTime(
  241.     SpritePtr srcSpriteP,
  242.     long timeInterval);
  243.  
  244. SW_FUNC void SWSetSpriteMoveProc(
  245.     SpritePtr srcSpriteP, MoveProcPtr moveProc);
  246.  
  247. SW_FUNC void SWBounceSpriteMoveProc(
  248.     SpritePtr srcSpriteP,
  249.     Point* spritePoint);
  250.  
  251. SW_FUNC void SWWrapSpriteMoveProc(
  252.     SpritePtr srcSpriteP,
  253.     Point* spritePoint);
  254.  
  255. SW_FUNC void SWSetSpriteCollideProc(
  256.     SpritePtr srcSpriteP,
  257.     CollideProcPtr collideProc);
  258.  
  259. SW_FUNC void SWSetSpriteVisible(
  260.     SpritePtr srcSpriteP,
  261.     Boolean isVisible);
  262.  
  263. SW_FUNC Boolean SWIsSpriteInRect(
  264.     SpritePtr srcSpriteP,
  265.     Rect* testRect);
  266.  
  267. SW_FUNC Boolean SWIsPointInSprite(
  268.     SpritePtr srcSpriteP,
  269.     Point testPoint);
  270.  
  271. SW_FUNC void SWStdDrawProc(
  272.     FramePtr srcFrameP,
  273.     FramePtr dstFrameP,
  274.     Rect* srcRect,
  275.     Rect* dstRect);
  276.  
  277. #if defined(powerc) || defined(__powerc)
  278. pascal void SWTimeTask(
  279.     TMTaskPtr tmTaskPtr);
  280. #else
  281. pascal void SWTimeTask(void);
  282. #endif
  283.  
  284. SW_FUNC Boolean SWIsTaskPrimed(
  285.     TMTask* tmTaskP);
  286.  
  287. #ifdef __cplusplus
  288. };
  289. #endif
  290.  
  291.  
  292. #endif    /* __SPRITE__ */
  293.  
  294.